Exception Handling একটি প্রক্রিয়া যেখানে কোডের চলমান অবস্থায় যেকোনো ধরনের ত্রুটি (error) বা ব্যতিক্রম (exception) হ্যান্ডেল করা হয়, যাতে প্রোগ্রাম ক্র্যাশ না হয় এবং ব্যবহারকারীকে একটি কার্যকরী বার্তা প্রদর্শন করা যায়। Swing এর মাধ্যমে ডেক্সটপ অ্যাপ্লিকেশন তৈরি করার সময় ব্যতিক্রম হ্যান্ডলিং খুবই গুরুত্বপূর্ণ, কারণ ইউজার ইন্টারফেস (UI) এ কোনো ত্রুটি ঘটলে অ্যাপ্লিকেশন বন্ধ হয়ে যেতে পারে।
Swing অ্যাপ্লিকেশন তৈরির সময় try-catch ব্লক ব্যবহার করা হয় ব্যতিক্রমগুলিকে ধরতে এবং সেগুলি কার্যকরভাবে পরিচালনা করতে। এই ব্যতিক্রমগুলির মধ্যে যেমন IOException, SQLException, NumberFormatException ইত্যাদি হতে পারে।
Exception Handling এর মূল ধারণা
- try: কোডের যে অংশে ব্যতিক্রম ঘটতে পারে, সেটি এখানে রাখা হয়।
- catch: যদি try ব্লকে কোনো ব্যতিক্রম ঘটে, তবে সেই ব্যতিক্রমটি এখান থেকে ধরা হয়।
- finally: এটি ঐচ্ছিক। যদি ব্যতিক্রম ঘটুক বা না ঘটুক, এটি সর্বশেষে এক্সিকিউট হয়। সাধারণত ক্লিনআপ বা রিসোর্স মুক্ত করার জন্য ব্যবহার করা হয়।
উদাহরণ: Swing অ্যাপ্লিকেশন এ Exception Handling
এখানে একটি Swing অ্যাপ্লিকেশন উদাহরণ দেওয়া হলো, যেখানে ব্যবহারকারী একটি সংখ্যার ইনপুট দেবে এবং সেই সংখ্যাটি গুণ (multiply) করা হবে। যদি ব্যবহারকারী কিছু ভুল ইনপুট দেয়, যেমন অক্ষর বা খালি ফিল্ড, তবে একটি ব্যতিক্রম (exception) ধরতে হবে এবং ব্যবহারকারীকে একটি ত্রুটি বার্তা (error message) দেখাতে হবে।
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class ExceptionHandlingExample {
public static void main(String[] args) {
// JFrame তৈরি
JFrame frame = new JFrame("Exception Handling Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 200);
// JTextField এবং JButton তৈরি
JTextField inputField = new JTextField(10);
JButton button = new JButton("Multiply by 2");
// JLabel ত্রুটি বার্তা দেখানোর জন্য
JLabel resultLabel = new JLabel("Result: ");
JLabel errorLabel = new JLabel();
// Button এ ActionListener যোগ করা
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
// ইউজার ইনপুট নিন এবং ইনপুটটি গুণ করুন
String inputText = inputField.getText();
int number = Integer.parseInt(inputText); // NumberFormatException হতে পারে
int result = number * 2;
resultLabel.setText("Result: " + result);
errorLabel.setText(""); // কোনো ত্রুটি না থাকলে ত্রুটি মেসেজ পরিষ্কার করুন
} catch (NumberFormatException ex) {
// যদি ইনপুটটি একটি সংখ্যা না হয়
errorLabel.setText("Error: Please enter a valid number.");
}
}
});
// Layout সেটআপ
frame.setLayout(new FlowLayout());
frame.add(new JLabel("Enter a number:"));
frame.add(inputField);
frame.add(button);
frame.add(resultLabel);
frame.add(errorLabel);
// JFrame দৃশ্যমান করা
frame.setVisible(true);
}
}
কোড বিশ্লেষণ:
- JTextField এবং JButton তৈরি:
JTextFieldইউজারের ইনপুট নেয়ার জন্য ব্যবহৃত হয় এবংJButtonএর মাধ্যমে ইনপুটটিকে প্রসেস করা হবে।
- ActionListener:
button.addActionListener()এর মাধ্যমে আমরা ইউজারের ইনপুট গ্রহণ করি এবং তারপর তা প্রসেস করতে যাই। এখানেInteger.parseInt()মেথড ব্যবহার করা হয়েছে, যা একটি স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তরিত করে। তবে যদি ব্যবহারকারী অযথা কোনো অক্ষর ইনপুট দেয়, তখন NumberFormatException হতে পারে।
- Exception Handling:
try-catchব্লকের মাধ্যমে আমরা NumberFormatException ধরছি, যদি ইনপুটটি সংখ্যায় রূপান্তর করা না যায়। এই ক্ষেত্রে, একটি ত্রুটি বার্তা ("Error: Please enter a valid number.") JLabel এ প্রদর্শিত হয়।
- JLabel for Result/Error:
- JLabel ব্যবহার করা হয়েছে ফলাফল এবং ত্রুটি বার্তা প্রদর্শনের জন্য।
Exception Handling এর মধ্যে আরও কিছু গুরুত্বপূর্ণ ধারণা
Multiple Exceptions Handling: একাধিক ব্যতিক্রম ধরতে একাধিক
catchব্লক ব্যবহার করা যেতে পারে।try { // কিছু কোড যা ব্যতিক্রম সৃষ্টি করতে পারে } catch (IOException ex) { // IOException হ্যান্ডলিং } catch (SQLException ex) { // SQLException হ্যান্ডলিং }Finally Block: finally ব্লক সব সময় এক্সিকিউট হয়, এক্সিপশন ঘটুক বা না ঘটুক। এটি রিসোর্স ক্লিনআপ করতে ব্যবহৃত হয়, যেমন ফাইল বন্ধ করা বা ডাটাবেস কানেকশন বন্ধ করা।
try { // কোড যা ব্যতিক্রম সৃষ্টি করতে পারে } catch (Exception ex) { // ব্যতিক্রম হ্যান্ডলিং } finally { // কোড যা সবসময় এক্সিকিউট হবে, যেমন রিসোর্স ক্লিনআপ }Throwing an Exception: আপনি নিজেও কাস্টম ব্যতিক্রম তৈরি করতে পারেন এবং
throwদিয়ে তা ছুড়ে দিতে পারেন।if (inputText.isEmpty()) { throw new IllegalArgumentException("Input cannot be empty"); }
সারাংশ
Swing অ্যাপ্লিকেশনে Exception Handling খুবই গুরুত্বপূর্ণ, কারণ এটি ব্যবহারকারীর ইনপুট এবং অন্যান্য কার্যক্রমের সময় ত্রুটি রোধ করতে সাহায্য করে। try-catch ব্লক ব্যবহার করে আমরা সহজেই ব্যতিক্রম ধরতে পারি এবং finally ব্লক ব্যবহার করে রিসোর্স ম্যানেজমেন্ট করতে পারি। উপরের উদাহরণে, আমরা দেখেছি কিভাবে NumberFormatException ধরতে হয় এবং ব্যবহারকারীকে একটি ত্রুটি বার্তা প্রদর্শন করতে হয়।